/***********************************************************************************
 * 文件名： umi_static.h
 * 作者： 刘言
 * 版本： 1
 * 说明：
 * 		通用存储器接口组件 Universal memory interface(UMI)。提供通用的存储器访问接口：
 *  Umi_Write、Umi_Read.  目前比较适用于操作MCU片上FLASH、小容量串行FLASH。
 * 修改记录：
 * 	2021/11/16: 初版。 刘言。 
***********************************************************************************/
#ifndef _UMI_STATIC_H_
#define _UMI_STATIC_H_

#include "umi_static_config.h"
#include "polsys.h"

#ifdef __cplusplus
 extern "C" {
#endif

// 自定义类型
#if (_UMI_ADDR_SIZE == 32)
typedef u32	umi_addr_t;			//地址类型，取决于地址需要占用的字节数
typedef u32 umi_size_t;             // 尺寸（长度）类型，取决于一次最大写入长度
#elif (_UMI_ADDR_SIZE == 16)
typedef u16	umi_addr_t;			//地址类型，取决于地址需要占用的字节数
typedef u16 umi_size_t;             // 尺寸（长度）类型，取决于一次最大写入长度
#elif (_UMI_ADDR_SIZE == 8)
typedef u8	umi_addr_t;			//地址类型，取决于地址需要占用的字节数
typedef u8 umi_size_t;             // 尺寸（长度）类型，取决于一次最大写入长度
#else
#error "Invalid address length."
#endif

// APIs

/**
 * 初始化
*/
#define Umi_Init()     _Umi_MemoryInit()
/**
 * 向存储器中写入数据
 *
 * @param addr 存储器地址
 * @param buff 要写入的数据
 * @param length 要写入的数据字节数
 *
 * @return true: 操作成功
 *         false: 操作失败，出现了错误
 */
bool Umi_Write(umi_addr_t addr, const u8 *buff, umi_size_t length);
/**
 * 从存储器中读出数据。如果是MCU片上FLASH，你可能不需要调用。
 *
 * @param addr 存储器地址
 * @param buff 读出的数据存放缓存
 * @param length 要读出的数据字节数
 *
 * @return true: 操作成功
 *         false: 操作失败，出现了错误
 */
bool Umi_Read(umi_addr_t addr, u8 *buff, umi_size_t length);

#ifdef __cplusplus
}
#endif

#endif
